package com.qianhui.action;

import com.qianhui.common.CM;
import com.qianhui.common.IResult;
import com.qianhui.pojo.GoodsType;
import com.qianhui.view.GoodsTypeView;
import com.qianhui.view.GoodsTypeViewAndList;

import java.sql.Timestamp;
import java.util.*;

public class GoodsTypeAction extends BaseAction
{
    // 常用变量
    private Map<String, Object> json;// 返回到前台的map对象
    private GoodsType goodsType;
    private List<GoodsType> goodsTypeList;

    private String goodsTypeJson;

    private List<GoodsTypeViewAndList> viewAndList;

    private String commonStr;

    public GoodsTypeAction()
    {
        json = new HashMap<String, Object>();
    }

    public String goods_type_add_do()
    {
        String method = getRequest().getMethod();
        System.out.println("=========请求是get还是post:" + method);
        if (method.toUpperCase().equals("GET"))
        {
            System.out.println("============如果直接输入网址进来的,什么操作都不做,必须是表单提交的!==========");
            return "404";
        }
        if (getGoodsType() == null || CM.validIsEmpty(getGoodsType().getGoodsTypeName()))
        {
            info = "类型名称是必填项。";
            json.put("success", false);
            json.put("info", info);
            return SUCCESS;
        }

        String[] gtNames = getGoodsType().getGoodsTypeName().split(",");
        List<GoodsType> goodsTypeList = new ArrayList<GoodsType>();
        for (String gtName : gtNames)
        {
            GoodsType gtTemp = new GoodsType();
            gtTemp.setGoodsTypeId(CM.getRandomTwentyFivePrimaryKeyId());
            if (CM.validIsEmpty(getGoodsType().getGoodsTypeParentId()) == true)
            {
                gtTemp.setGoodsTypeParentId("");
            }
            else
            {
                gtTemp.setGoodsTypeParentId(getGoodsType().getGoodsTypeParentId());
            }
            gtTemp.setGoodsTypeName(gtName.trim());
            gtTemp.setGoodsTypeTime(new Timestamp(Calendar.getInstance().getTimeInMillis()));
            goodsTypeList.add(gtTemp);
            try
            {
                Thread.sleep(100);
            } catch (InterruptedException e)
            {
                continue;
            }
        }
        List<GoodsType> goodsTypeListResult = goodsTypeDAO.saveList(goodsTypeList);
        if (goodsTypeListResult == null)
        {
            info = "保存失败。";
            json.put("success", false);
            json.put("info", info);
            return SUCCESS;
        }

        json.put("success", true);
        json.put("goodsType", goodsTypeListResult);
        return SUCCESS;
    }

    public String goods_type_delete_do()
    {
        String method = getRequest().getMethod();
        System.out.println("=========请求是get还是post:" + method);
        if (method.toUpperCase().equals("GET"))
        {
            System.out.println("============如果直接输入网址进来的,什么操作都不做,必须是表单提交的!==========");
            return "404";
        }
        if (CM.validIsEmpty(getCommonStr()))
        {
            info = "类型id是必填项。";
            json.put("success", false);
            json.put("info", info);
            return SUCCESS;
        }

        String[] ids = getCommonStr().split(",");

        List<String> idsList = new ArrayList<String>();
        for (String idsTemp : ids)
        {
            idsList.add(idsTemp.trim());
        }
        int deleteResult = goodsTypeDAO.deleteListByIds(idsList);
        if (deleteResult == IResult.DELETE_EXCEPTION)
        {
            info = "删除失败。";
            json.put("success", false);
            json.put("info", info);
            return SUCCESS;
        }

        json.put("success", true);
        return SUCCESS;
    }

    public String goods_type_update_do()
    {
        String method = getRequest().getMethod();
        System.out.println("=========请求是get还是post:" + method);
        if (method.toUpperCase().equals("GET"))
        {
            System.out.println("============如果直接输入网址进来的,什么操作都不做,必须是表单提交的!==========");
            return "404";
        }
        if (getGoodsType() == null || CM.validIsEmpty(getGoodsType().getGoodsTypeId()) || CM.validIsEmpty(getGoodsType().getGoodsTypeName()))
        {
            info = "类型名称是必填项。";
            json.put("success", false);
            json.put("info", info);
            return SUCCESS;
        }

        GoodsType goodsTypeTemp = goodsTypeDAO.findById(getGoodsType().getGoodsTypeId());
        if (goodsTypeTemp == null)
        {
            info = "没有找到此类型。";
            json.put("success", false);
            json.put("info", info);
            return SUCCESS;
        }

        goodsTypeTemp.setGoodsTypeName(getGoodsType().getGoodsTypeName());
        GoodsType goodsTypeResult = goodsTypeDAO.save(goodsTypeTemp);
        if (goodsTypeResult == null)
        {
            info = "更新失败。";
            json.put("success", false);
            json.put("info", info);
            return SUCCESS;
        }

        json.put("success", true);
        return SUCCESS;
    }

    public String get_shop_goods_type()
    {
        List<GoodsType> goodsTypeListTemp = goodsTypeDAO.findAll();
        if (goodsTypeListTemp.size() == 0)
        {
            setGoodsTypeJson(null);
        }
        Map<String, GoodsTypeView> goodsTypeMap = new LinkedHashMap<String, GoodsTypeView>();
        for (GoodsType gt : goodsTypeListTemp)
        {
            GoodsTypeView gtvTemp = new GoodsTypeView();
            gtvTemp.setId(gt.getGoodsTypeId());
            gtvTemp.setName(gt.getGoodsTypeName());
            gtvTemp.setpId(gt.getGoodsTypeParentId() == null ? "" : gt.getGoodsTypeParentId());
            gtvTemp.setOpen(true);
            gtvTemp.setNoR(false);
            gtvTemp.setPicture(gt.getGoodsTypePic());
            gtvTemp.setGrade(1);
            goodsTypeMap.put(gt.getGoodsTypeId(), gtvTemp);
        }
        List<GoodsTypeView> goodsTypeViewListForJson = new ArrayList<GoodsTypeView>();
        Set<Map.Entry<String, GoodsTypeView>> set = goodsTypeMap.entrySet();
        for (Iterator<Map.Entry<String, GoodsTypeView>> it = set.iterator(); it.hasNext(); )
        {
            Map.Entry<String, GoodsTypeView> entry = (Map.Entry<String, GoodsTypeView>) it.next();
            if (CM.validIsEmpty(entry.getValue().getpId()))
            {
                entry.getValue().setGrade(1);
                goodsTypeMap.put(entry.getKey(), entry.getValue());
            }
            else if (CM.validIsEmpty(goodsTypeMap.get(entry.getValue().getpId()).getpId()))
            {
                entry.getValue().setGrade(2);
                goodsTypeMap.put(entry.getKey(), entry.getValue());
            }
            else if (CM.validIsEmpty(goodsTypeMap.get(goodsTypeMap.get(entry.getValue().getpId()).getpId()).getpId()))
            {
                entry.getValue().setGrade(3);
                goodsTypeMap.put(entry.getKey(), entry.getValue());
            }
            goodsTypeViewListForJson.add(entry.getValue());
        }

        List<GoodsTypeViewAndList> goodsTypeViewAndListForShowList = new ArrayList<GoodsTypeViewAndList>();
        for (int i = 0; i < goodsTypeViewListForJson.size(); i++)
        {
            if (goodsTypeViewListForJson.get(i).getGrade() == 1)
            {
                GoodsTypeViewAndList goodsTypeViewAndListTemp = new GoodsTypeViewAndList();
                goodsTypeViewAndListTemp.setView(goodsTypeViewListForJson.get(i));
                goodsTypeViewAndListForShowList.add(goodsTypeViewAndListTemp);
            }
        }
        for (int i = 0; i < goodsTypeViewAndListForShowList.size(); i++)
        {
            List<GoodsTypeViewAndList> goodsTypeViewAndListForShowList_2 = new ArrayList<GoodsTypeViewAndList>();
            for (int j = 0; j < goodsTypeViewListForJson.size(); j++)
            {
                if (goodsTypeViewListForJson.get(j).getGrade() == 2 && goodsTypeViewListForJson.get(j).getpId().equals(goodsTypeViewAndListForShowList.get(i).getView().getId()))
                {
                    GoodsTypeViewAndList goodsTypeViewAndListTemp = new GoodsTypeViewAndList();
                    goodsTypeViewAndListTemp.setView(goodsTypeViewListForJson.get(j));
                    goodsTypeViewAndListForShowList_2.add(goodsTypeViewAndListTemp);
                }
            }
            goodsTypeViewAndListForShowList.get(i).setList(goodsTypeViewAndListForShowList_2);
        }
        for (int i = 0; i < goodsTypeViewAndListForShowList.size(); i++)
        {
            String i_Str = "";
            for (int j = 0; j < goodsTypeViewAndListForShowList.get(i).getList().size(); j++)
            {
                String j_Str = "";
                List<GoodsTypeViewAndList> goodsTypeViewAndListForShowList_3 = new ArrayList<GoodsTypeViewAndList>();
                for (int k = 0; k < goodsTypeViewListForJson.size(); k++)
                {
                    if (goodsTypeViewListForJson.get(k).getGrade() == 3 && goodsTypeViewListForJson.get(k).getpId().equals(goodsTypeViewAndListForShowList.get(i).getList().get(j).getView().getId()))
                    {
                        GoodsTypeViewAndList goodsTypeViewAndListTemp = new GoodsTypeViewAndList();
                        goodsTypeViewAndListTemp.setView(goodsTypeViewListForJson.get(k));
                        goodsTypeViewAndListTemp.getView().setChildrenIds(goodsTypeViewAndListTemp.getView().getId());
                        goodsTypeViewAndListForShowList_3.add(goodsTypeViewAndListTemp);
                        // 记录下一级id
                        j_Str += goodsTypeViewListForJson.get(k).getId() + ",";
                    }
                }
                j_Str = goodsTypeViewAndListForShowList.get(i).getList().get(j).getView().getId() + "," + j_Str;
                if (j_Str.length() > 0)
                {
                    i_Str += j_Str;
                }
                // 设置此级别孩子id
                goodsTypeViewAndListForShowList.get(i).getList().get(j).getView().setChildrenIds(j_Str.length() > 0 ? j_Str.substring(0, j_Str.length() - 1) : "");
                goodsTypeViewAndListForShowList.get(i).getList().get(j).setList(goodsTypeViewAndListForShowList_3);
            }
            i_Str = goodsTypeViewAndListForShowList.get(i).getView().getId() + "," + i_Str;
            // 设置此级别孩子id
            goodsTypeViewAndListForShowList.get(i).getView().setChildrenIds(i_Str.length() > 0 ? i_Str.substring(0, i_Str.length() - 1) : "");
        }

        setViewAndList(goodsTypeViewAndListForShowList);

        for (GoodsTypeViewAndList gtvl : goodsTypeViewAndListForShowList)
        {
            // System.out.println(gtvl.getView().getId() + "," +
            // gtvl.getView().getName() + "," +
            // gtvl.getView().getChildrenIds());
            for (GoodsTypeViewAndList gtvl2 : gtvl.getList())
            {
                // System.out.println("----" + gtvl2.getView().getId() + "," +
                // gtvl2.getView().getName() + "," +
                // gtvl2.getView().getChildrenIds());
                for (GoodsTypeViewAndList gtvl3 : gtvl2.getList())
                {
                    // System.out.println("--------" + gtvl3.getView().getId() +
                    // "," + gtvl3.getView().getName() + "," +
                    // gtvl3.getView().getChildrenIds());
                }
            }
        }
        return SUCCESS;
    }

    public String goods_type_get_old_pic_do()
    {
        String method = getRequest().getMethod();
        System.out.println("=========请求是get还是post:" + method);
        if (method.toUpperCase().equals("GET"))
        {
            System.out.println("============如果直接输入网址进来的,什么操作都不做,必须是表单提交的!==========");
            return "404";
        }
        if (CM.validIsEmptyWithTrim(getCommonStr()))
        {
            info = "没有找到此类型。";
            json.put("success", false);
            json.put("info", info);
            return SUCCESS;
        }

        GoodsType goodsType = goodsTypeDAO.findById(getCommonStr());

        if (goodsType == null)
        {
            info = "没有找到此类型。";
            json.put("success", false);
            json.put("info", info);
            return SUCCESS;
        }

        json.put("success", true);
        json.put("old_pic", goodsType.getGoodsTypePic());
        json.put("old_tax_rate", goodsType.getGoodsTypeTaxRate() == null ? "" : String.valueOf(goodsType.getGoodsTypeTaxRate()));
        return SUCCESS;
    }

    public String goods_type_set_new_pic_do()
    {
        String method = getRequest().getMethod();
        System.out.println("=========请求是get还是post:" + method);
        if (method.toUpperCase().equals("GET"))
        {
            System.out.println("============如果直接输入网址进来的,什么操作都不做,必须是表单提交的!==========");
            return "404";
        }

        if (getGoodsType() == null || CM.validIsEmptyWithTrim(getGoodsType().getGoodsTypeId()) || CM.validIsEmptyWithTrim(getGoodsType().getGoodsTypePic()))
        {
            info = "没有找到此类型。";
            json.put("success", false);
            json.put("info", info);
            return SUCCESS;
        }

        List<String> pictureListTemp = CM.getImgSrcList(getGoodsType().getGoodsTypePic(), 1);
        if (pictureListTemp == null)
        {
            info = "照片上传是必选项。";
            json.put("success", false);
            json.put("info", info);
            return SUCCESS;
        }

        GoodsType goodsTypeFromDB = goodsTypeDAO.findById(getGoodsType().getGoodsTypeId());
        if (goodsTypeFromDB == null)
        {
            info = "没有找到此类型。";
            json.put("success", false);
            json.put("info", info);
            return SUCCESS;
        }
        goodsTypeFromDB.setGoodsTypeTaxRate(getGoodsType().getGoodsTypeTaxRate());
        goodsTypeFromDB.setGoodsTypePic(pictureListTemp.get(0));
        GoodsType goodsTypeResult = goodsTypeDAO.save(goodsTypeFromDB);
        if (goodsTypeResult == null)
        {
            info = "保存失败。";
            json.put("success", false);
            json.put("info", info);
            return SUCCESS;
        }

        json.put("success", true);
        return SUCCESS;
    }

    public Map<String, Object> getJson()
    {
        return json;
    }

    public void setJson(Map<String, Object> json)
    {
        this.json = json;
    }

    public GoodsType getGoodsType()
    {
        return goodsType;
    }

    public void setGoodsType(GoodsType goodsType)
    {
        this.goodsType = goodsType;
    }

    public List<GoodsType> getGoodsTypeList()
    {
        return goodsTypeList;
    }

    public void setGoodsTypeList(List<GoodsType> goodsTypeList)
    {
        this.goodsTypeList = goodsTypeList;
    }

    public String getGoodsTypeJson()
    {
        return goodsTypeJson;
    }

    public void setGoodsTypeJson(String goodsTypeJson)
    {
        this.goodsTypeJson = goodsTypeJson;
    }

    public String getCommonStr()
    {
        return commonStr;
    }

    public void setCommonStr(String commonStr)
    {
        this.commonStr = commonStr;
    }

    public List<GoodsTypeViewAndList> getViewAndList()
    {
        return viewAndList;
    }

    public void setViewAndList(List<GoodsTypeViewAndList> viewAndList)
    {
        this.viewAndList = viewAndList;
    }

}
